package ninth.实现Runnable接口;
//在”实现Runnable接口“中写过MyThread类继承了，现在直接来拿用
public class 使用Thread类启动多线程 {
    public static void main(String[] args) {
        //实例化Runnable子类对象
        MyThread mt1 = new MyThread("线程A");
        MyThread mt2 = new MyThread("线程B");
        //实例化Thread类对象
        Thread t1 = new Thread(mt1);
        Thread t2 = new Thread(mt2);
        t1.start();
        t2.start();
    }
}
/*
D:\WorkSpaces\Java\jdk-21\bin\java.exe "-javaagent:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\lib\idea_rt.jar=64065:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\WorkSpaces\JavaDevelopBase_start_329\out\production\JavaDevelopBase_start_329 ninth.实现Runnable接口.使用Thread类启动多线程
线程A运行，i=0
线程A运行，i=1
线程A运行，i=2
线程B运行，i=0
线程B运行，i=1
线程B运行，i=2
线程B运行，i=3
线程B运行，i=4
线程B运行，i=5
线程B运行，i=6
线程B运行，i=7
线程B运行，i=8
线程A运行，i=3
线程B运行，i=9
线程A运行，i=4
线程A运行，i=5
线程A运行，i=6
线程A运行，i=7
线程A运行，i=8
线程A运行，i=9

Process finished with exit code 0
 */

/**
 * 通过Thread类和Runnable类都可以实现多线程，那么两者有什么区别？
 * Thread类的定义：  public class Thread extends Object implements Runnable
 * 可以发现Thread类也是Runnable接口的子类，但是在Thread类中并没有完全实现Runnable接口中的run()方法
 *   Thread类部分定义的代码******
 * 从定义中发现，在Thread类中的run()方法调用的是Runnable接口中的run()方法。也就是说，此方法是由Runnable子类完成的，
 * 所以，如果要通过继承Thread类实现多线程，则必须覆写run()方法
 * 讲到这里上述的代码操作模式有点熟悉：Thread和Runnable的子类同时都实现了Runnable接口，之后将Runnable的子类实例放到Thread类中，这种操作模式和之前
 * 说过的代理设计模式很类似。
 *     实际上Thread类和Runnable接口之间在使用上也是有区别的：
 *     如果一个类继承Thread类，则不适合于多个线程共享资源
 *     而是实现了Runnable接口，就可以方便的实现资源共享
 *
 */